Modulo:PokémonInfo/Regionaldex
Modulo da usare nel template PokémonInfo per determinare -- i dex regionali local rdex = {} local txt = require('Modulo:Wikilib/strings') local tab = require('Modulo:Wikilib/tables') local dex = mw.loadData('Modulo:Dex/data') local c = mw.loadData('Modulo:Colore/data') local sup = mw.loadData('Modulo:Sup/data') -- Ritorna il dex regionale di un Pokémon nel vecchio -- dex regionale specificato: nel caso in cui non sia -- presente, ritorna nil local getOldDex = function(newDex, oldDexTable, changedDexTable) if changedDexTable and changedDexTablenewDex then return txt.tf(changedDexTablenewDex) end for subtract, ndex in ipairs(oldDexTable) do if ndex newDex then return nil; elseif ndex > newDex then return txt.tf(newDex - subtract + 1) end end return txt.tf(newDex - table.getn(oldDexTable)) end -- Aggiunge un title al primo argomento costituito -- dal secondo e dal terzo separati da uno spazio local addtt = function(newDex, oldDex, title) return string.interp('${newDex}', {oldDex = oldDex, title = title, newDex = newDex}) end -- Inserisce le informazioni relative al vecchio dex -- regionale: per Sinnoh un sup di platino, per le -- altre un title local insOld = {} insOld.johto = function(newDex, oldDex) return addtt(newDex, oldDex, 'nella seconda generazione') end insOld.hoenn = function(newDex, oldDex) return addtt(newDex, oldDex, 'nella terza generazione') end insOld.sinnoh = function(newDex, oldDex) return newDex .. sup.Pt end insOld.unima = function(newDex, oldDex) return addtt(newDex, oldDex, 'in Nero e Bianco') end insOld.alola = function(newDex, oldDex) return addtt(newDex, oldDex, 'in Sole e Luna') end -- Ordina la tabella store: la table è esterna alla -- funzione così da non essere ricreata ogni volta local regiongens = {Kanto = 1, Johto = 2, Hoenn = 3, Sinnoh = 4, Unima = 5, Kalos = 6, Alola = 7} local region_sort = function(c, d) local a, b = c:match('>(%a+)'), d:match('>(%a+)') return regiongensa < regiongensb end -- La funzione che genera le celle per i dex regionali: -- nello scorrere la tabella fornita dalla search, -- controlla che il dex non sia tra quelli aggiornati in seguito -- ed effettua l'inserimento; se ciò non accade, concatena all'ultimo -- elemento l'asterisco giusto chiamando la funzione olddex. local dexlist = function(dexes) if table.getn(dexes) 0 then return nil end local store = {} local str = [=[ ${reg} #${rdex}]=] local kalos = [=[ Kalos #${rdex}]=] local incl = '${rdex}' for region, rdex in pairs(dexes) do if region:find('kalos') then local zone = region:match('kalos(%a+)$') table.insert(store, string.interp(kalos, {c = c.. zone.normale, reg = zone, rdex = rdex})) else local oldDexTable = dex.. 'Added' if oldDexTable then local oldDex = getOldDex(tonumber(rdex), oldDexTable, dex.. 'Changed') if oldDex ~= rdex then rdex = insOldregion(rdex, oldDex or 'Non disponibile') end end table.insert(store, string.interp(str, {reg = string.fu(region), rdex = rdex})) end end table.sort(store, region_sort) for k, v in ipairs(store) do storek = v end if #store > 5 then table.insert(store, 1 + math.floor(#store / 2), ' ') end return table.concat(store) end -- Semplicemente cerca tra tutti i dex se si trova il numero di dex -- nazionale fornito: in caso positivo, lo inserisce come elemento -- di una table con indice il nome della regione. Se una certa regione -- ha più dex regionali (es: alola) inserisce come valore una table -- contenente il numero di dex nazionale local search = function(ndex) local dexes = {} for region, regionalDex in pairs(dex) do local rdex = table.search(regionalDex, ndex) if rdex then dexesregion = txt.three_figures(rdex) end end return dexes end --Interfaccia. Riceve un ndex su tre cifre e un tipo, e interpola il colore standard -- del tipo e la lista dei dex regionali, creata con la funzione dexlist, al box in wikicode rdex.regionaldex = function(frame) local ndex = string.trim(frame.args1) or '000' return string.interp([=[| colspan="2" | [[Pokédex Regionale|'Pokédex Regionali']] ${dexlist} ]=], { dexlist = dexlist(search(ndex)) or 'In nessun Pokédex Regionale' }) end rdex.Regionaldex, rdex.RegionalDex = rdex.regionaldex, rdex.regionaldex return rdex